Problem 2 — Pijak

Wprowadzenie


Naszym zadaniem będzie zbadanie szans na przeżycie pijaka wracającego do domu. Szanse te będziemy badać w zależności od wartości kilku parametrów:

Symulacja ruchu pijaka


Zakładamy, że pijak porusza się po trajektorii ruchu Browna z dodanym w osi OX dryfem $v$ — możemy wyrazić ją jako $X_t = B_t + (vt, 0)$, gdzie $B_t$ to dwuwymiarowy ruch Browna.

Za krok czasowy $dt$ przyjmujemy równy $1$ — z racji złożoności obliczeniowej symulacji. Jest to dość duży krok, który trochę zakłamuje to jak ruch pijaka wyglądałby przy powyższych założeniach (o tym za chwilę poniżej).

Pijaka należy też odpowiednio odbijać od krawędzi obszaru. W przypadku wykroczenia pijaka poza wybraną oś (poziomą lub pionową) nowa pozycja będzie znajdować się w punkcie będącym odbiciem symetrycznym względem danej osi.

Poniżej klasa Drinker, w której zaimplementowaliśmy pijaka zgodnie z powyższymi wskazaniami.

Zbadamy teraz jak wygląda ruch pijaka w zależności od jego prędkości. Stworzymy wykresy kilkudziesięciu trajektorii ruchu. Dla każdej trajektorii przygotujemy histogram — będziemy badać jak często pijak znajduje się na danej wysokości w osi OY. Następnie wszystkie histogramy naniesiemy na jeden wykres. Jest to wykres pozwalający jedynie na podstawowe obserwacje, niekoniecznie praktyczny, ale umieszczamy go ze względu na to, że bardzo się nam spodobał.

Dla klarowności przygotujemy mapy ciepła zagęszczenia ruchu pijaka.

Pomocne w tym będą funkcje visualize i density_heatmap.

Możemy zauważyć, wraz ze wzrostem szybkości pijak znacznie rzadziej znajduję się w górnej połowie rozpatrywanego obszaru. Już w tym miejscu można więc przepuszczać, że wzrost prędkości pomaga pijakowi w przeżyciu, ponieważ rzadziej zapuszcza się wtedy na drogę.

Wcześniej zadaliśmy sobie pytanie, jak wyglądałyby ruch pijaka dla znacznie mniejszego $dt$. Weźmy $dt = 0.01$ i postąpmy analogicznie jak powyżej.

Możemy zauważyć, że po zmniejszeniu kroku, uzyskaliśmy znacznie inny rezultat. Pijak, mimo że jego prędkość wynosiła $2\frac{\text{m}}{\text{s}}$, znacznie częściej poruszał się w górnej części obszaru.

Widzimy więc, że w pewnym sensie pomogliśmy pijakowi. Dzięki większemu krokowi czasowemu, zwiększyliśmy jego szanse na przeżycie — będzie bowiem rzadziej przecinać drogę.

Implementacja samochodów i momentów ich pojawiania się


Samo poruszanie się samochodów nie trudno zaimplementować — w zależności od miejsca pojawienia się (kierunku jazdy — direction) będziemy samochód przesuwać od $v\cdot dt$, gdzie $v$ to prędkość samochodu.

Większe wyzwanie stanowi odpowiednie zaimplementowanie momentów pojawienia się samochodów z racji tego, że posługujemy się "bardzo" dyskretnym czasem.

Zgodnie z poleceniem, czasy pojawienia się samochodów to momenty skoków mieszanego procesu Poissona. Żeby je "zdyskretyzować" najpierw przeskalujemy je przez dodatni skalar scale $ > 0$, zaogrąglimy do jedności, a następnie zwrócimy te czasy, które mieszczą się w zadanym horyzoncie czasowym $T$ (ilość kroków jaką w danej symualcji potrzebował pijak, by dostać się do domu).

Domyślnie, scale $= 10$.

W powyższych funkcjach pojawia się metoda rvs. Żeby móc wywołać ją dla rozkłądu jednostajnego (z którego będziemy często korzystać w trakcie symulacji) stworzyliśmy odpowiednią klasę Unif.

Analiza wpływu parametrów na szanse pijaka


Poniższa funkcja simulation przeprowadza pojedynczą symulacje "spaceru" pijaka. Najpierw wyznaczamy horyzont czasowy $T$, dla niego momenty pojawienia się samochodów, a następnie w każdym kroku symulacji sprawdzamy czy wystąpiła kolizja.

Funkcja zwraca wartość logiczną True lub False w zależności od tego czy pijakowi udało się dotrzeć do domu. W przypadku zwrócenia wartości False, zwracamy także moment uderzenia — śmierci — pijaka.

Funkcja analysis służy do powtórzenia przeprowadzenia symulacji Monte Carlo ($n$ powtórzeń).

Ustalmy pewne domyślne parametry dla naszych symulacji:

Stworzymy też funkcje, którą zautomatyzują wizualizacje wyznaczonych danych — probability_plot i moments_of_hits. Z ich wykorzystaniem przedstawimy zależności prawdopodobieństwa przeżycia pijaka w zależności od zmieniających się wartości jednego z parametrów, ale i także wykresy pudełkowe momentów śmierci pijaka.

Wpływ szybkości pijaka na szanse przeżycia


Wyznaczymy prawdopodobieństwa dla $15$ różnych prędkości z zakresu $(0.5, \, 2)\frac{\text{m}}{\text{s}}$.

Można zauważyć, że wzrost prędkości pijaka zapewnia mu większe szanse na przeżycie. Co warto zauważyć dla małych prędkości pijak zdecydowanie częściej ginie (prawdopodobieńtwo przeżycia bliskie zeru).

Przyglądając się drugiemu wykresowi możemy stwierdzić, że boxploty stają się coraz węższe, co spowodowane jest tym, że pijak potrzebuje mniej czasu na dotarcie do końca planszy (ginąć też będzie szybciej). Dla mniejszych prędkości jest więcej obserwacji odstających.

Wpływ szerokości ulicy na szanse przeżycia


Terz też postępujemy podobnie — wyznaczamy prawdopodobieństwa i momenty śmierci dla $15$ wartości szerokości drogi z zakresu $(5, 15)$.

Wniosek z wykresów jest dość prosty: szersza ulica — nie masz życia.

Boxploty tym razem nie róźnią się tak bardzo. Możemy zauważyć, że zarówno ich wąsy, jak i linie wyrażające medianę, znajdują się na podobnym poziomie. Szerokość ulicy nie wpływa więc aż tak mocno na moment śmierci, jedynie na prawdopodobieństwo jej zajścia.

Wpływ prędkości poruszania się samochodów na szanse przeżycia


Wpływ prędkości samochodów będziemy badać poprzez pozwolenie samochodom na przyjmowanie wartości z przedziału $(v, v+5)$. Będziemy więc wariować dolną granicą — będzie przyjować kolejne wybrane wartości z przedziału $(10, 40)$.

Widzimy, że szanse pijaka wzrastają wraz ze wzrostem prędkości minimalnej samochodów. Dla dużych prędkości prawdopodobieństwo jest bardzo wysokie — przekracza nawet $0.75$. Boxploty podobnie jak wcześniej mają zarówno wąsy, jak i kwartyle rzędu $0.5$ na podobnym poziomie.

Nie będziemy rozpatrywać sytuacji, w której będziemy zwiększać prędkość samochodów jadących tylko z jednej strony, ponieważ wyniki będą analogiczne do tych, które teraz uzyskaliśmy. Możemy z pewnością stwierdzić, że jeżeli pijak woli bardziej poruszać się w dolnej części obszaru, to zwiększanie prędkości samochodów jadących z lewej strony będzie szybciej zwiększać szanse pijaka na przeżycie.

Wpływ rozkładów pojawiania się samochodów na szanse przeżycia


Wpływ na ilość skoków mieszanego procesu Poissona ma jego intensywność. Wiemy, że dla mieszanego procesu Poissona $N(t)$, że:

$$ \mathbb{E}\left[N(t)\right] = t \,\mathbb{E}\left[\Lambda\right],$$

gdzie $\Lambda$ jest zmienną mieszającą. Ilość skoków nie zależy więc aż tak mocno od rozkładu jaki się dobierze, a od jego wartości oczekiwanej (oczywiście rozpatrujemy $\Lambda > 0$).

Wpływ rozkładu będziemy badać dla rozkładu jednostajnego $\mathcal{U}(a, a+0.1)$ dla $a \in \left[0.1, 1\right]$. Dla takiego rozkładu nieprzewidywalność częstotliwości pojawiania się samochodów stanie się bardziej przewidywalna — ze względu na waski przedziały.

Oczywiście wraz ze wzrostem wartości oczekiwanej zmiennej mieszającej, obserwujemy malejące szanse pijaka na powrót do domu. Prawdopodobieństwo dla dużej intensywności ruchu wynosi około $0.3$ (dość dużo)— wynika to stąd, że dla prędkości $v_d = 2$ pijak ma skłonność do nieprzekraczania połowy obszaru (czasami zdarza się, że nie dotyka nawet jezdni).

Na boxplotach możemy zaobserwować, że mediana momentu śmierci nieznacznie się obniża — średnio śmierć następuje więc coraz wcześniej.